/*
 *  jpeg文件解析,依赖 libjpeg
 */
#ifndef _LIB_JPEGT_ADAPT_H_
#define _LIB_JPEGT_ADAPT_H_

#include <stdint.h>

#ifdef __cplusplus
extern "C"
{
#endif

// -------------------------- 文件数据整读整写模式 --------------------------

/*
 *  jpeg 图片数据获取
 *  参数:
 *      inFile: 路径
 *      width: 返回图片宽(像素), 不接收置NULL
 *      height: 返回图片高(像素), 不接收置NULL
 *      pixelBytes: 返回图片每像素的字节数, 不接收置NULL
 *  返回: rgb图片数据指针, 已分配内存 !! 用完记得free()释放 !!
 */
uint8_t *LibJpegGet(const char *inFile, uint32_t *width, uint32_t *height, uint32_t *pixelBytes);
uint8_t *LibJpegGetBGRA(const char *inFile, uint32_t *width, uint32_t *height, uint32_t *pixelBytes);

/*
 *  生成 jpeg 图片
 *  参数:
 *      outFile: 路径
 *      addr: 原始数据
 *      width: 宽(像素)
 *      height: 高(像素)
 *      pixelBytes: 每像素字节数
 *      quality: 压缩质量,1~100,越大越好,文件越大
 *  返回: 0成功 -1失败
 */
int32_t LibJpegCreate(const char *outFile, uint8_t *addr, uint32_t width, uint32_t height, uint32_t pixelBytes, uint32_t quality);

// -------------------------- 行数据流处理模式 --------------------------

/*
 *  行处理模式
 *  参数: 同上
 *  返回: 行处理指针,NULL失败
 */
void *LibJpegGetLine(const char *inFile, uint32_t *width, uint32_t *height, uint32_t *pixelBytes);

/*
 *  行处理模式
 *  参数: 同上
 *  返回: 行处理指针,NULL失败
 */
void *LibJpegCreateLine(const char *outFile, uint32_t width, uint32_t height, uint32_t pixelBytes, uint32_t quality);

/*
 *  按行rgb数据读、写
 *  参数:
 *      obj: 行处理指针
 *      rgbLine: 行rgb数据,一行长度为width*height*pixelBytes,多行时继续加
 *      line: 要处理的行数
 *  返回:
 *      写图片时返回成功写入行,
 *      读图片时返回实际读取行数,
 */
uint32_t LibJpegLine(void *obj, uint8_t *rgbLine, uint32_t line);

/*
 *  完毕释放指针
 */
void LibJpegCloseLine(void *obj);

// -------------------------- 直接文件缩放 --------------------------

/*
 *  文件缩放
 *  参数:
 *      inFile, outFile: 输入输出文件,类型.jpg.jpeg.JPG.JPEG
 *      zoom: 缩放倍数,0.1到1为缩放,1.0以上放大
 *      quality: 输出图片质量,1~100,越大越好,文件越大
 */
void LibJpegZoom(const char *inFile, const char *outFile, float zoom, int32_t quality);

#ifdef __cplusplus
}
#endif

#endif // _LIB_JPEGT_ADAPT_H_
